package com.linkgie.galaxyframework.process;

import java.util.Properties;

/**
 * 流程服务；
 * 
 * @author Hike
 *
 */
public interface ProcessFlowEngine {

	/**
	 * @param <T>
	 * @param builder
	 * @return
	 */
	ProcessDefinitionBuilder getDefinitionBuilder();

	/**
	 * 启动流程；
	 * 
	 * @param definitionId 流程定义编号；
	 * @return
	 */
	default ProcessFlow start(String definitionId) {
		return start(definitionId, null);
	}

	/**
	 * 启动流程；
	 * 
	 * @param definitionId 流程定义的编号Id ；
	 * @param args         启动参数；<br>
	 *                     将作为属性值可通过流程上下文进行访问{@link ProcessContext#getAttribute(String)}；<br>
	 *                     同名参数将覆盖流程定义的启动属性（{@link StartPoint#getAttribute(String)}）、<br>
	 *                     节点属性（{@link ProcessNode#getAttribute(String)}）、<br>
	 *                     分支属性（{@link ProcessBranch#getAttribute(String)}）；
	 * @return
	 */
	ProcessFlow start(String definitionId, Properties args);

//	/**
//	 * 终止流程；
//	 * 
//	 * @param processId
//	 * @return
//	 */
//	default ProcessFlow terminate(String processId) {
//		return terminate(processId, null);
//	}
//
//	/**
//	 * 终止流程；
//	 * 
//	 * @param processId
//	 * @param args
//	 * @return
//	 */
//	ProcessFlow terminate(String processId, Properties args);

	/**
	 * 获取流程实例；
	 * 
	 * @param processId
	 * @return
	 */
	ProcessFlow getProcess(String processId);

}
